package com.java.basis.reference;

import javafx.util.Builder;

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

/**
 * @author wangning
 * @date 2023/5/18 16:30
 * 虚引用,需要与引用队列配合使用
 * 设置虚引用的唯一目的，就是在这个对象被垃圾回收的时候收到一个系统通知或者后续添加进一步的处理
 * Java技术允许使用finalize方法在垃圾收集器将对象从内存清除出去之前做必要的清理工作
 */
public class PhantomReferenceDemo {
    public static void main(String[] args) {
        Object obj = new Object();
        ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>();
        PhantomReference<Object> phantomReference = new PhantomReference<>(obj, referenceQueue);
        System.out.println(obj);
        System.out.println(phantomReference.get());
        System.out.println(referenceQueue);
        System.out.println("========================");
        obj = null;
        System.gc();
        System.out.println(obj);
        System.out.println(phantomReference.get());
        System.out.println(referenceQueue);

    }
}
